//
//  ZYYStoreCellLayout.m
//  Emorald
//
//  Created by 一盘儿菜 on 16/7/14.
//  Copyright © 2016年 zyy. All rights reserved.
//

#import "ZJCellLayout.h"

@implementation ZJCellLayout

- (instancetype)init {
    if (self = [super init]) {
        
    }
    return self;
}

/**
 *  只要显示的边界发生改变就重新布局: 内部会重新调用prepareLayout和layoutAttributesForElementsInRect方法获得所有cell的布局属性
 */
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
    return YES;
}

/** 有效距离:当item的中间x距离屏幕的中间x在HMActiveDistance以内,才会开始放大, 其它情况都是缩小 */
static CGFloat const HMActiveDistance = 80;
/** 缩放因素: 值越大, item就会越大 */
static CGFloat const HMScaleFactor = 0.1;

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
    // 0.计算可见的矩形框
    CGRect visiableRect;
    visiableRect.size = self.collectionView.frame.size;
    visiableRect.origin = self.collectionView.contentOffset;
    
    // 1.取得默认的cell的UICollectionViewLayoutAttributes
    NSArray *array = [super layoutAttributesForElementsInRect:rect];
    // 计算屏幕最中间的x
    CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.frame.size.width * 0.5;
    
    // 2.遍历所有的布局属性
    for (UICollectionViewLayoutAttributes *attrs in array) {
        // 如果不在屏幕上,直接跳过
        if (!CGRectIntersectsRect(visiableRect, attrs.frame)) continue;
        // 每一个item的中点x
        CGFloat itemCenterX = attrs.center.x;
        // 差距越小, 缩放比例越大
        // 根据跟屏幕最中间的距离计算缩放比例
        CGFloat scale = 1 + HMScaleFactor * (1 - (ABS(itemCenterX - centerX) / HMActiveDistance));
        scale = MIN(scale, 1);
        scale = MAX(scale, 0.8);
        attrs.transform = CGAffineTransformMakeScale(scale, scale);
    }
    return array;
}

@end

